//
//  HMHomeViewController.swift
//  CZWeibo31
//
//  Created by apple on 16/8/9.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
// cell可重用标示符
private let HMHomeViewCellId = "HMHomeViewCellId"
class HMHomeViewController: HMVisitorViewController {

    // 创建一个ViewModel
    private lazy var statusListViewModel: HMStatusListViewModel = HMStatusListViewModel()
    // 刷新控件
    let refreshControl = HMRefreshControl()
    override func viewDidLoad() {
        super.viewDidLoad()
        if !isLogin {
            visitorView?.setupVisitorViewInfo(nil, title: nil)
            // 如果没有登录的话设置未登录信息和logo 也就没有必要再加载数据了 所以return
            return
        }
        setupUI()
        loadData()

    }
    
    func setupUI(){
        // 添加控件
        navigationController!.view.insertSubview(pullDownTipLabel, belowSubview: navigationController!.navigationBar)
        setupTableViewInfo()
    }
    
    // MARK: - 设置tableView相关信息
    func setupTableViewInfo(){
        // 注册cell
        tableView.registerClass(HMStatusCell.self, forCellReuseIdentifier: HMHomeViewCellId)
        // 设置代理
        tableView.dataSource = self
        tableView.delegate = self
        // 设置高度(自动计算行高)(使用contetView 的高度来得到cell 高度)
        tableView.rowHeight = UITableViewAutomaticDimension
        // 设置预估行高(预估行高越接近真实高度越好)
        tableView.estimatedRowHeight = 200
        // 设置footView
        tableView.tableFooterView = activityView
        
        // 添加事件
        refreshControl.addTarget(self, action: "refreshAction", forControlEvents: UIControlEvents.ValueChanged)
        // 添加到tableView身上
        tableView.addSubview(refreshControl)
        tableView.separatorStyle = .None
    }
    
    func refreshAction(){
        printLog("请求数据")
        loadData()
        
    }
    
    // 菊花
    private lazy var activityView: UIActivityIndicatorView = {
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        view.color = AppThemeColor
        return view
    }()
    // 微博指示label
    private lazy var pullDownTipLabel: UILabel = {
        let lab = UILabel(textColor: UIColor.whiteColor(), textSize: 15)
        lab.frame = CGRect(x: 0, y: 34, width: SCREENW, height: 30)
        lab.backgroundColor = AppThemeColor
        lab.textAlignment = .Center
        // 隐藏
        lab.hidden = true
        return lab
    }()

}
//MARK: - UITableViewDataSource
extension HMHomeViewController: UITableViewDataSource, UITableViewDelegate {
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.dataArray.count
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(HMHomeViewCellId, forIndexPath: indexPath) as! HMStatusCell
        cell.statusViewModel = statusListViewModel.dataArray[indexPath.row]
        return cell
    }
    
    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        // 如果是最后一个cell  而且菊花没有动画
        if indexPath.row + 1 == statusListViewModel.dataArray.count && !activityView.isAnimating() {
            printLog(indexPath.row)
            // 设置动画
            activityView.startAnimating()
            // 请求数组
            loadData()
        }
    }
}

extension HMHomeViewController {
    func loadData(){
        // 请求数据 true 为上拉加载更多   false  下拉刷新
        
        statusListViewModel.loadData(activityView.isAnimating()) { (isSuccess, count) -> () in
            
            if !isSuccess {
                print("请求数据失败")
                return
            }else {
                self.setupPullDownTipLabelAnim(count)
            }
            
            // 请求数据成功
            print("请求数据成功")
            // 刷新UI
            self.tableView.reloadData()
            // 结束动画
            self.endRefreshing()
        }
    }
    // 停止动画
    func endRefreshing(){
        self.activityView.stopAnimating()
        self.refreshControl.endRefreshing()
    }
    // 设置动画
    func setupPullDownTipLabelAnim(count: Int){
        // 如果他为true  为上拉加载更多 不执行动画
        if activityView.isAnimating() {
            return
        }
        
        // 如果他已经显示 就代表在做动画 就不需要再动画了
        if !self.pullDownTipLabel.hidden {
            return
        }
        let text: String
        if count == 0 {
            text = "您已经是最新的微博啦"
        }else {
            text = "您更新啦\(count)条微博"
        }
        pullDownTipLabel.text = text
        // 设置动画
        UIView.animateWithDuration(0.5, animations: { () -> Void in
            // 下来
            self.pullDownTipLabel.hidden = false
            self.pullDownTipLabel.transform = CGAffineTransformMakeTranslation(0, 30)
            
            }) { (_) -> Void in
                // 回去
                UIView.animateWithDuration(0.5, delay: 2, options: [], animations: { () -> Void in
                    self.pullDownTipLabel.transform = CGAffineTransformIdentity
                    }, completion: { (_) -> Void in
                        self.pullDownTipLabel.hidden = true
                })
        }
    }
}












